package org.example.cake.service;

import org.example.cake.dto.BuyCarRequest;
import org.example.cake.entity.Buycar;
import org.springframework.stereotype.Service;

import java.util.List;

import java.util.List;
import java.util.Map;

@Service
public interface BuycarService{


    int deleteByPrimaryKey(Integer buyid);

    int insert(Buycar record);

    int insertSelective(Buycar record);

    Buycar selectByPrimaryKey(Integer buyid);

    int updateByPrimaryKeySelective(Buycar record);

    int updateByPrimaryKey(Buycar record);

    Integer addBuyCarapi(Buycar buycar);

    List<BuyCarRequest> selectBuycarListapi(Integer userid);

    Integer updateCountapi(Buycar buycar);

    Integer deleteBuyapi(Integer buyid);

    Integer deleteBuyAllapi(Integer userid);

    BuyCarRequest getcakeNow(Buycar buycar);
    /**
     * 查询所有购物车详情（包含用户名称和蛋糕名称）
     * @return 购物车详情列表
     */
    List<Map<String, Object>> getBuycarDetails();

    /**
     * 分页查询购物车详情（支持模糊搜索）
     * @param page 页码
     * @param pageSize 每页条数
     * @param searchKey 搜索关键词
     * @return 购物车详情列表
     */
    List<Map<String, Object>> getBuycarDetailsBySearch(Integer page, Integer pageSize, String searchKey);

    /**
     * 统计符合搜索条件的总记录数
     * @param searchKey 搜索关键词
     * @return 总记录数
     */
    Integer countBuycarDetailsBySearch(String searchKey);

    /**
     * 根据用户ID查询购物车详情
     * @param userId 用户ID
     * @return 购物车详情列表
     */
    List<Map<String, Object>> getBuycarDetailsByUserId(Integer userId);

    /**
     * 根据蛋糕ID查询购物车详情
     * @param cakeId 蛋糕ID
     * @return 购物车详情列表
     */
    List<Map<String, Object>> getBuycarDetailsByCakeId(Integer cakeId);

    /**
     * 根据用户ID和蛋糕ID查询购物车详情
     * @param userId 用户ID
     * @param cakeId 蛋糕ID
     * @return 购物车详情列表
     */
    List<Map<String, Object>> getBuycarDetailsByUserAndCake(Integer userId, Integer cakeId);

    /**
     * 新增购物车记录
     * @param buycar 购物车实体
     * @return 是否成功
     */
    boolean addBuycar(Buycar buycar);

    /**
     * 更新购物车记录
     * @param buycar 购物车实体
     * @return 是否成功
     */
    boolean updateBuycar(Buycar buycar);

    /**
     * 删除购物车记录
     * @param buyId 购物车ID
     * @return 是否成功
     */
    boolean deleteBuycar(Integer buyId);

    /**
     * 批量删除购物车记录
     * @param buyIds 购物车ID列表
     * @return 删除成功的数量
     */
    int batchDeleteBuycar(List<Integer> buyIds);

    /**
     * 清楚购物车
     * @param buycarid 购物车id
     * @return
     */
    Integer delBuycar(int buycarid);

    /**
     * 查看购物车是否存在此蛋糕
     * @param buycar
     * @return
     */
    Integer selectBuyCarifhas(Buycar buycar);

    /**
     * 查询购物车蛋糕数量
     * @param buycar
     * @return
     */
    Integer selectcakecount(Buycar buycar);

    /**
     * 修改购物车信息
     * @param buycar
     * @return
     */
    Integer updatebuycarCount(Buycar buycar);
    /**
     * 查询购物车里购物总数有木有
     * @Date 2025-08-11 谭丽娜
     * @param cakeid
     * @return
     */
    Integer cakecount(Integer cakeid);
    /**
     * 根据蛋糕id修改购物车数量
     * @param buycar
     * @return
     */
    Integer updateCountCakeid(Buycar buycar);
}
